home *** CD-ROM | disk | FTP | other *** search
- {
- > In a program I am writing I need to create a very large array to store
- > infomation in I need an array[1..4096] of string and turbo pascal will
-
- Try my unit. My unit uses a TEMSStream to store the information.
- Look at the demo how to store your 4096 strings.
- }
-
- (* Unit LongArray - large arrays in EMS
- PUBLIC DOMAIN 1993 by Holger Daehre 2:248/317.88
- Running: TP 6.0 or above. *)
-
- Unit LongArr;
-
- Interface
-
- Uses Objects;
-
- Var
- Lo_element,ElementSize:LongInt;
-
- (* Create_Array creates Array[Low..High] of Size *)
- Procedure Create_Array(Var ps:pStream;Low,High,Size:LongInt);
-
- (* Read_Array loads one element from INDEX into Buf *)
- Procedure Read_Array(Var ps:pStream;Index:LongInt;Var Buf);
-
- (* Write_Array stores the information of Buf in Index *)
- Procedure Write_Array(Var ps:pStream;Index:LongInt;Var Buf);
-
- (* Dispose_Array releases the allocated EMS memory *)
- Procedure Dispose_Array(Var ps:pStream);
-
- Implementation
-
- Procedure Create_Array(Var ps:pStream;Low,High,Size:LongInt);
- Var
- Elements,ArraySize:LongInt;
- Begin
- Lo_element:=Low;
- Elements:=High-Low+1;
- ArraySize:=Elements * Size;
- ElementSize:=Size;
- ps := New(pEMSStream, Init(ArraySize,ArraySize));
- If ps^.status <> stOk Then
- Begin
- Dispose(ps, Done);
- ps := NIL;
- End;
- End;
-
- Procedure Read_Array(Var ps:pStream;Index:LongInt;Var Buf);
- Begin
- If ps<>nil Then
- Begin
- ps^.Seek((Index-Lo_element)*ElementSize);
- ps^.Read(Buf,ElementSize);
- End;
- End;
-
- Procedure Write_Array(Var ps:pStream;Index:LongInt;Var Buf);
- Begin
- If ps<>nil Then
- Begin
- ps^.Seek((Index-Lo_element)*ElementSize);
- ps^.Write(Buf,ElementSize);
- End;
- End;
-
- procedure Dispose_Array(Var ps:pStream);
- Begin
- Dispose(ps,Done);
- ps:=NIL;
- End;
-
- End.
-
-
-
-
- Program LongArrayDemo;
- Uses Objects,LongArr;
- Var MyArr:PStream;
- S:String;
- I:Word;
- Begin
- Create_Array(MyArr,0,4096,SizeOf(String));
- If MyArr=nil Then
- Begin
- WriteLn('Couldn''t create array in EMS');
- Halt;
- End;
- S:='This is a TEST !';
- For I:=0 To 4096 Do Write_Array(MyArr,I,S);
- s:='';
- Randomize;
- Read_Array(MyArr,Random(4096),S);
- WriteLn(S);
- Dispose_Array(MyArr);
- End.